home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl1615.lha / h / ext_sym.h < prev    next >
C/C++ Source or Header  |  1992-04-07  |  4KB  |  186 lines

  1. /* format of a rsyms output file:
  2. struct lsymbol_table tab;   gives number of symbols, and sum of length of 
  3.              strings 
  4. addr,char[],addr,char[],...
  5. This can be read since the addr is sizeof(int) and the char[] is null
  6. terminated, immediately followed by and addr...
  7. there are tab.n_symbols pairs occurring.
  8.  
  9. */
  10.  
  11.  
  12. #ifdef HAVE_AOUT 
  13. #undef BSD
  14. #undef ATT
  15. #define BSD  
  16. #include HAVE_AOUT 
  17. #endif
  18.  
  19. #ifdef AIX3
  20. #include <a.out.h>
  21. #endif
  22.  
  23. #ifdef COFF_ENCAPSULATE
  24. #undef BSD
  25. #undef ATT
  26. #define BSD
  27. #include "a.out.encap.h"
  28. #endif
  29.  
  30. #ifndef HEADER_SEEK
  31. #define HEADER_SEEK(x)
  32. #endif
  33.  
  34. typedef unsigned int addr;
  35.  
  36. struct node{
  37.   char *string;
  38.   addr address;
  39. #ifdef AIX3
  40.   unsigned short tc_offset;
  41. #endif  
  42. };
  43.  
  44. struct lsymbol_table{
  45.   unsigned int n_symbols ;
  46.   unsigned int tot_leng;};
  47.  
  48. #define SYM_ADDRESS(table,i) ((*(table).ptable))[i].address
  49. #define SYM_STRING(table,i) ((*(table).ptable))[i].string
  50. #define SYM_TC_OFF(table,i) ((*(table).ptable))[i].tc_offset
  51.  
  52. /* typedef struct node *TABL;  */
  53. /* gcc does not like typedef struct node TABL[];*/
  54.  
  55. typedef struct node TABL[]; 
  56.  
  57.  
  58.  
  59. #ifdef ATT
  60. #define COFF
  61. #ifndef TEXT_NSCN
  62. #define TEXT_NSCN 1
  63. #define DATA_NSCN 2
  64. #define BSS_NSCN 3
  65. #endif
  66. #endif
  67.  
  68.  
  69. #ifdef ATT
  70. #include <filehdr.h>
  71. #include <scnhdr.h>
  72. #include <syms.h>
  73. /* is aouthdr.h one always here on sysv
  74.    Interactive systems needs it now at least.   I am not sure if
  75.    the others used to include this...
  76.  */
  77. #include <aouthdr.h>
  78. #define MAXPATHLEN 200
  79. #define N_BADMAG(x)  !(ISCOFF(x.f_magic))
  80. #define N_SYMOFF(x) (x).f_symptr
  81. #define NSYMS(x) (x).f_nsyms  
  82. #include <reloc.h>
  83. #endif
  84.  
  85.  
  86.  
  87.  
  88. #define MAXPATHLENGTH 200
  89. #define RDONLY "r"
  90.  
  91. #ifdef BSD
  92. #define filehdr exec
  93. #ifndef AIX
  94. #ifndef reloc  
  95. #define reloc relocation_info
  96. #endif
  97. #endif
  98. #define NSYMS(f) ((unsigned int )((f).a_syms/(sizeof(struct nlist))))
  99.  
  100. #ifndef AIX
  101. #define syment nlist
  102. #endif
  103.  
  104. #ifndef SYMESZ  
  105. #define SYMESZ (sizeof(struct nlist))
  106. #endif
  107.  
  108. #ifndef  SYMNMLEN
  109.   /* no symbols are directly in the table */
  110. #define SYMNMLEN 0  
  111. #endif
  112.  
  113. #ifndef  EXT_and_TEXT_BSS_DAT
  114. #define EXT_and_TEXT_BSS_DAT(p) (((p)->n_type & N_EXT) && \
  115.   ((p)->n_type & (N_TEXT | N_DATA | N_BSS)))
  116. #endif
  117.  
  118. #ifndef SYM_NAME
  119. #define SYM_NAME(x) (my_string_table+(x)->n_un.n_strx)
  120. #endif
  121.  
  122. #ifndef NUM_AUX  
  123. #define NUM_AUX(p) 0
  124. #endif  
  125.  
  126. #ifndef N_RELOFF  
  127. #define N_RELOFF(p) (N_TXTOFF(p) +(p).a_text+(p).a_data )
  128. #endif
  129.  
  130. #define NTYPE(sym) ((sym)->n_type & N_TYPE)
  131.  
  132. #ifndef N_SECTION
  133. #define N_SECTION(sym) (sym->n_type & N_TYPE & ~N_EXT)
  134. #endif 
  135.  
  136. #define N_UNDEF N_UNDF
  137. #endif /*end bsd */
  138.  
  139. #ifdef HPUX
  140. #define nlist nlist_
  141. #undef syment
  142. struct syment {
  143.     long    n_value;
  144.     unsigned char    n_type;
  145.     unsigned char    n_length;
  146.     short    n_almod;
  147.     short    n_unused;
  148.     union { long n_strx;} n_un;
  149. };
  150.  
  151. #endif /* Hp */
  152.  
  153. #ifdef COFF /* sys v */
  154. #ifndef EXT_and_TEXT_BSS_DAT
  155. #define EXT_and_TEXT_BSS_DAT(p) \
  156.  ((1 <= (p)->n_scnum) && ((p)->n_scnum <= 3 ) && (p)->n_sclass == C_EXT)
  157. #endif
  158. #define NUM_AUX(p) (p)->n_numaux
  159. #define N_TXTOFF(p)  section[1].s_scnptr
  160. #define SYM_NAME(p) \
  161.   (((p)->n_zeroes == 0) ? \
  162.         &my_string_table[(p)->n_offset] : \
  163.                ((p)->n_name[SYMNMLEN -1] ? \
  164.                  (strncpy(tem,(p)->n_name,  \
  165.                        SYMNMLEN), \
  166.                   (char *)tem) : \
  167.                   (p)->n_name ))
  168.          
  169. #define NTYPE(sym) (sym)->n_scnum
  170.  
  171. #endif /* COFF */
  172.  
  173. struct  string_address_table
  174. { TABL *ptable;
  175.   unsigned int length;
  176.   unsigned int alloc_length;
  177. };
  178.  
  179. struct string_address_table c_table;
  180. struct string_address_table combined_table;
  181.  
  182. #define PTABLE_EXTRA 20
  183.  
  184. char *malloc();
  185.  
  186.